package com.example.service.ifac;

import com.example.pojo.dto.AllotProcessingDTO;
import com.example.pojo.dto.PageDTO;
import com.example.pojo.dto.SaveProductAllotApplyDTO;
import com.example.pojo.dto.UpdateProductAllotApplyDTO;
import com.example.pojo.orm.ProductAllotApply;
import com.example.util.JsonResult;

import java.util.List;

/**
 * @author 季鑫利
 * @description 商品调拨申请接口
 */
public interface ProductAllotApplyService {

    /**
     * 新增调拨申请单
     *
     * @param saveProductAllotApplyDTO 调拨申请单信息
     * @return 操作结果
     * @author 季鑫利
     */
    JsonResult saveProductAllotApply(SaveProductAllotApplyDTO saveProductAllotApplyDTO);

    /**
     * 根据调拨申请单id删除申请单
     *
     * @param id 调拨申请单id
     * @return 操作结果
     * @author 季鑫利
     */
    JsonResult removeProductAllotApply(Integer id);

    /**
     * 更新调拨单
     *
     * @param updateProductAllotApplyDTO 更新调拨单信息参数
     * @return 操作结果
     * @author 季鑫利
     */
    JsonResult updateProductAllotApply(UpdateProductAllotApplyDTO updateProductAllotApplyDTO);

    /**
     * 查询所有调拨申请单
     *
     * @param pageDTO 分页参数
     * @return 所有调拨申请单
     * @author 季鑫利
     */
    JsonResult<List<ProductAllotApply>> queryProductAllotApply(PageDTO pageDTO);

    /**
     * 根据商品类别id查询
     *
     * @param typeId 商品类别id
     * @return 调拨申请单信息
     * @author 季鑫利
     */
    JsonResult<ProductAllotApply> queryProductAllotApplyByTypeId(Integer typeId);

    /**
     * 调拨处理--发货
     *
     * @param updateProductAllotApplyDTO 更新调拨单信息参数
     * @author 季鑫利
     */
    JsonResult shipmentsAllocateProcessing(UpdateProductAllotApplyDTO updateProductAllotApplyDTO);

    /**
     * 调拨处理--退货
     *
     * @param updateProductAllotApplyDTO 更新库存处理参数实体
     * @author 季鑫利
     */
    JsonResult sendBackAllocateProcessing(UpdateProductAllotApplyDTO updateProductAllotApplyDTO);

    /**
     * 查询调货次数前十商品类别
     *
     * @return 商品类别信息
     * @author 季鑫利
     */
    JsonResult<List<ProductAllotApply>> queryAllotsTopTen();

    /**
     * 查询断货次数前十商品类别
     *
     * @return 商品类别信息
     * @author 季鑫利
     */
    JsonResult<List<ProductAllotApply>> querySupplyShortageTopTen();

    /**
     * 查询柜台调货次数前十商品类别
     *
     * @return 商品类别信息
     * @author 季鑫利
     */
    JsonResult<List<ProductAllotApply>> queryCountersNumberTopTen();
}
